#include "mylabel.h"
#include <QDebug>

MyLabel::MyLabel(QLabel *parent)
    :QLabel(parent)
{
    resize(400, 300);

    //1、在构造函数中安装事件过滤器
    installEventFilter(this);
}

MyLabel::~MyLabel()
{

}

//鼠标进入事件
void MyLabel::enterEvent(QEvent *event)
{
    Q_UNUSED(event);
    qDebug() << ">>>>鼠标进入了";
}

//鼠标离开事件
void MyLabel::leaveEvent(QEvent *event)
{
    Q_UNUSED(event);
    qDebug() << "鼠标离开了<<<<<";
}

//重写鼠标按压事件
void MyLabel::mousePressEvent(QMouseEvent *event)
{
    //如果是鼠标左键按压
    if(event->button() == Qt::LeftButton)
    {
        qDebug() << "鼠标左键被----按压----了,横坐标x = " << event->x()
                 << ", 纵坐标y = " << event->y();
    }
}
//重写鼠标释放事件
void MyLabel::mouseReleaseEvent(QMouseEvent *event)
{
    //如果是鼠标左键按压
    if(event->button() == Qt::LeftButton)
    {
        qDebug() << "鼠标左键被=====释放===了,横坐标x = " << event->x()
                 << ", 纵坐标y = " << event->y();
    }
}
//鼠标移动事件
void MyLabel::mouseMoveEvent(QMouseEvent *event)
{
    //如果是鼠标左键按压,此处需要使用位操作，不能直接使用等号
    if(event->buttons() & Qt::RightButton)
    {
        qDebug() << "鼠标左键被*****移动*****了,横坐标x = " << event->x()
                 << ", 纵坐标y = " << event->y();
    }

}

//重写event函数
bool MyLabel::event(QEvent *e)
{
    //鼠标移动
    if(e->type() == QEvent::MouseMove)
    {
        qDebug() << "event函数拦截了鼠标移动事件";
        return true;
    }
    else if(e->type() == QEvent::MouseButtonPress)
    {
        qDebug() << "event函数拦截了鼠标按压事件";
        return true;
    }
    else
    {
        return QLabel::event(e);
    }
}

bool MyLabel::eventFilter(QObject *obj, QEvent *ev)
{
    //判断是不是本对象
    if(obj == this)
    {
        if(ev->type() == QEvent::MouseButtonPress)
        {
            QMouseEvent *event = static_cast<QMouseEvent *>(ev);

            //如果是鼠标左键按压
            if(event->button() == Qt::LeftButton)
            {
                qDebug() << "eventFilter 鼠标左键被按压了,横坐标x = "
                         << event->x() << ", 纵坐标y = " << event->y();
                 return true;
            }
        }
    }

    return QLabel::eventFilter(obj, ev);
}
